package com.other.atomic;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicTest1 {
    /**
     * AtomicInteger 内部使用了一个叫 Unsafe 的类来直接操作内存。
     * 使用的是 CAS 指令（如 cmpxchg），CPU 保证原子性。
     * 使用 volatile 保证可见性，防止线程缓存脏读。
     */
    private static AtomicInteger atomicInteger = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {
        int threadCount = 10;
        Thread[] threads = new Thread[threadCount];

        // 创建100个线程，每个线程将counter自增1000次
        for (int i = 0; i < threadCount; i++) {
            threads[i] = new Thread(() -> {
                for (int j = 0; j < 1000; j++) {
                    atomicInteger.incrementAndGet(); // 原子自增操作
                }
            });
            threads[i].start();
        }

        // 等待所有线程执行完毕
        for (int i = 0; i < threadCount; i++) {
            threads[i].join(); // 主线程等待子线程结束
        }

        // 打印最终计数器值
        System.out.println(atomicInteger.get());
    }
}
